package com.blackandwhitesensation.sice.presentation.backingBeans;

import com.blackandwhitesensation.sice.exceptions.*;
import com.blackandwhitesensation.sice.modelo.*;
import com.blackandwhitesensation.sice.modelo.dto.EventoDTO;
import com.blackandwhitesensation.sice.presentation.businessDelegate.BusinessDelegatorView;
import com.blackandwhitesensation.sice.utilities.*;

import org.primefaces.component.calendar.*;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.selectonemenu.SelectOneMenu;

import org.primefaces.event.DateSelectEvent;
import org.primefaces.event.RowEditEvent;

import java.text.DateFormat;
import java.text.SimpleDateFormat;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;


/**
 *
 * @author Zathura Code Generator http://code.google.com/p/zathura/
 *
 */
public class EventoView {
    private InputText txtActivo;
    private InputText txtIdTipoEvento_TipoEvento;
    private InputText txtIdEvento;
    private Calendar txtFechaFini;
    private Calendar txtFechaInicio;
    private CommandButton btnSave;
    private CommandButton btnModify;
    private CommandButton btnClear;
    private List<EventoDTO> data;
    private EventoDTO selectedEvento;
    private SelectOneMenu somTiposEventos;
    private InputText txtNombre;
    private List<SelectItem>losTiposEventos= new ArrayList<SelectItem>();

    public EventoView() {
        super();
    }

    public void rowEventListener(RowEditEvent e) {
        try {
            EventoDTO eventoDTO = (EventoDTO) e.getObject();

            if (txtActivo == null) {
                txtActivo = new InputText();
            }

            txtActivo.setValue(eventoDTO.getActivo());

            if (txtIdTipoEvento_TipoEvento == null) {
                txtIdTipoEvento_TipoEvento = new InputText();
            }

            txtIdTipoEvento_TipoEvento.setValue(eventoDTO.getIdTipoEvento_TipoEvento());

            if (txtIdEvento == null) {
                txtIdEvento = new InputText();
            }

            txtIdEvento.setValue(eventoDTO.getIdEvento());

            if (txtFechaFini == null) {
                txtFechaFini = new Calendar();
            }

            txtFechaFini.setValue(eventoDTO.getFechaFini());

            if (txtFechaInicio == null) {
                txtFechaInicio = new Calendar();
            }

            txtFechaInicio.setValue(eventoDTO.getFechaInicio());

            action_modify();
        } catch (Exception ex) {
        }
    }

    public String action_clear() {
       
    	if(txtNombre!= null){
    		txtNombre.setValue(null);
    	}
    	
    	if(somTiposEventos != null){
    		somTiposEventos.setDisabled(true);
    	}
    	
    	if (txtActivo != null) {
            txtActivo.setValue(null);
            txtActivo.setDisabled(true);
        }

        if (txtIdTipoEvento_TipoEvento != null) {
            txtIdTipoEvento_TipoEvento.setValue(null);
            txtIdTipoEvento_TipoEvento.setDisabled(true);
        }

        if (txtFechaFini != null) {
            txtFechaFini.setValue(null);
            txtFechaFini.setDisabled(true);
        }

        if (txtFechaInicio != null) {
            txtFechaInicio.setValue(null);
            txtFechaInicio.setDisabled(true);
        }

        if (txtIdEvento != null) {
            txtIdEvento.setValue(null);
            txtIdEvento.setDisabled(false);
        }

        if (btnSave != null) {
            btnSave.setDisabled(true);
        }

       

        if (btnModify != null) {
            btnModify.setDisabled(true);
        }

        if (btnClear != null) {
            btnClear.setDisabled(false);
        }

        return "";
    }

    public void listener_txtFechaFini(DateSelectEvent dse) {
        Date inputDate = (Date) txtFechaFini.getValue();
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        FacesContext.getCurrentInstance()
                    .addMessage("",
            new FacesMessage("Fecha Seleccionada " +
                dateFormat.format(dse.getDate())));
    }

    public void listener_txtFechaInicio(DateSelectEvent dse) {
        Date inputDate = (Date) txtFechaInicio.getValue();
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        FacesContext.getCurrentInstance()
                    .addMessage("",
            new FacesMessage("Fecha Seleccionada " +
                dateFormat.format(dse.getDate())));
    }

    public void listenerNombre() {
        Evento entity = null;
        
        try {
        	String nombreEvento = txtNombre.getValue().toString();
        	entity = BusinessDelegatorView.getEventosNombre(nombreEvento);
        } catch (Exception e) {
            // TODO: handle exception
        }

        if (entity == null) {
        	somTiposEventos.setDisabled(false);
            txtFechaFini.setDisabled(false);
            txtFechaInicio.setDisabled(false);
            btnSave.setDisabled(false);
            btnModify.setDisabled(true);
            btnClear.setDisabled(false);
        } else {
            
        	
            txtFechaFini.setValue(entity.getFechaFini());
            txtFechaFini.setDisabled(false);
            txtFechaInicio.setValue(entity.getFechaInicio());
            txtFechaInicio.setDisabled(false);
            somTiposEventos.setValue(entity.getIdEvento());
            somTiposEventos.setDisabled(false);
            btnSave.setDisabled(true);
            btnModify.setDisabled(false);
            btnClear.setDisabled(false);
        }
    }

    public String action_save() {
        try {
            String nombre = txtNombre.getValue().toString();
        	Long tipoEvento = new Long(somTiposEventos.getValue().toString());
        	Date fechaInicio = (Date)txtFechaInicio.getValue();
        	Date fechaFin = (Date)txtFechaFini.getValue();
        	BusinessDelegatorView.guardarEvento(tipoEvento, fechaInicio, fechaFin, nombre);
            action_clear();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_delete() {
        try {
            BusinessDelegatorView.deleteEvento(FacesUtils.checkLong(txtIdEvento));
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
            action_clear();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_modify() {
        try {
            BusinessDelegatorView.updateEvento(FacesUtils.checkString(txtActivo),
                FacesUtils.checkDate(txtFechaFini),
                FacesUtils.checkDate(txtFechaInicio),
                FacesUtils.checkLong(txtIdEvento),
                FacesUtils.checkLong(txtIdTipoEvento_TipoEvento));
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
            action_clear();
        } catch (Exception e) {
            data = null;
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String actionDeleteDataTableEditable() {
        try {
            if (txtIdEvento == null) {
                txtIdEvento = new InputText();
            }

            txtIdEvento.setValue(selectedEvento.getIdEvento());

            BusinessDelegatorView.deleteEvento(FacesUtils.checkLong(txtIdEvento));
            data.remove(selectedEvento);
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
            action_clear();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_modifyWitDTO(String activo, Date fechaFini,
        Date fechaInicio, Long idEvento, Long idTipoEvento_TipoEvento)
        throws Exception {
        try {
            BusinessDelegatorView.updateEvento(activo, fechaFini, fechaInicio,
                idEvento, idTipoEvento_TipoEvento);
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
        } catch (Exception e) {
            //renderManager.getOnDemandRenderer("EventoView").requestRender();
            FacesUtils.addErrorMessage(e.getMessage());
            throw e;
        }

        return "";
    }

    public InputText getTxtActivo() {
        return txtActivo;
    }

    public void setTxtActivo(InputText txtActivo) {
        this.txtActivo = txtActivo;
    }

    public InputText getTxtIdTipoEvento_TipoEvento() {
        return txtIdTipoEvento_TipoEvento;
    }

    public void setTxtIdTipoEvento_TipoEvento(
        InputText txtIdTipoEvento_TipoEvento) {
        this.txtIdTipoEvento_TipoEvento = txtIdTipoEvento_TipoEvento;
    }

    public Calendar getTxtFechaFini() {
        return txtFechaFini;
    }

    public void setTxtFechaFini(Calendar txtFechaFini) {
        this.txtFechaFini = txtFechaFini;
    }

    public Calendar getTxtFechaInicio() {
        return txtFechaInicio;
    }

    public void setTxtFechaInicio(Calendar txtFechaInicio) {
        this.txtFechaInicio = txtFechaInicio;
    }

    public InputText getTxtIdEvento() {
        return txtIdEvento;
    }

    public void setTxtIdEvento(InputText txtIdEvento) {
        this.txtIdEvento = txtIdEvento;
    }

    public List<EventoDTO> getData() {
        try {
            if (data == null) {
                data = BusinessDelegatorView.getDataEvento();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return data;
    }

    public void setData(List<EventoDTO> eventoDTO) {
        this.data = eventoDTO;
    }

    public EventoDTO getSelectedEvento() {
        return selectedEvento;
    }

    public void setSelectedEvento(EventoDTO evento) {
        this.selectedEvento = evento;
    }

    public CommandButton getBtnSave() {
        return btnSave;
    }

    public void setBtnSave(CommandButton btnSave) {
        this.btnSave = btnSave;
    }

    public CommandButton getBtnModify() {
        return btnModify;
    }

    public void setBtnModify(CommandButton btnModify) {
        this.btnModify = btnModify;
    }

  

    public CommandButton getBtnClear() {
        return btnClear;
    }

    public void setBtnClear(CommandButton btnClear) {
        this.btnClear = btnClear;
    }

    public TimeZone getTimeZone() {
        return java.util.TimeZone.getDefault();
    }

	public List<SelectItem> getLosTiposEventos() {
		 try{
			 
			 List <TipoEvento> losTiposEv= BusinessDelegatorView.getTipoEvento();
			 for (int i = 0; i < losTiposEv.size(); i++) {
				 losTiposEventos.add(new SelectItem(losTiposEv.get(i).getIdTipoEvento(),losTiposEv.get(i).getNombreEvento() ));
			}
			 
		 }catch(Exception e){
			 FacesContext.getCurrentInstance().addMessage("",new FacesMessage(e.getMessage()));
		 }
		
		
		return losTiposEventos;
	}

	public void setLosTiposEventos(List<SelectItem> losEventos) {
		this.losTiposEventos = losEventos;
	}

	public SelectOneMenu getSomTiposEventos() {
		return somTiposEventos;
	}

	public void setSomTiposEventos(SelectOneMenu somTiposEventos) {
		this.somTiposEventos = somTiposEventos;
	}

	public InputText getTxtNombre() {
		return txtNombre;
	}

	public void setTxtNombre(InputText txtNombre) {
		this.txtNombre = txtNombre;
	}
    
	
    
    
}
